<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>迭代器</title>
</head>
<body>
    <script>
        /**
            迭代器(iterator)是一种接口，为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口，就可以完成
            遍历操作。
            (1).ES6创造了一种新的遍历命令for...of循环，Iterator接口主要供for...of消费
            (2).原生具备iterator接口的数据(可用for of遍历)
                a) Array
                b) Arguments
                c) Set
                d) Map
                e) String
                f) TypedArray
                g) NodeList
            
            (3) 工作原理
                a) 创建一个指针对象， 指向当前数据结构的起始位置
                b) 第一次调用对象的next方法，指针自动指向数据结构的第一个成员
                c) 接下来不断调用next方法，指针一直往后移动，直到指向最后一个成员。
                d) 每调用next方法返回一个包含value和down属性的对象
             注:需要自定义遍历数据的时候，要想到迭代器
        */

        //声明一个数组
        const xiyou = ['唐僧','孙悟空','猪八戒','沙僧'];

        //使用 for ... of 遍历数组
        for(let v of xiyou) {
            console.log(v);
        }

        let iterator = xiyou[Symbol.iterator]();
        //调用对象的next方法
        console.log(iterator.next());
    </script>

</body>
</html>